package com.uzhie.web.dao;

import com.uzhie.web.module.UserVehicle;
import com.uzhie.web.module.Vehicle;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

/**
 * Created by lilongfei on 2018/7/13.
 */
public interface VehicleDAO extends Mapper<Vehicle> {

    /**
     * 批量绑定用户与车辆关系
     * create by lilongfei
     *
     * @param vhsId 车辆与用户关系集合
     * @return 插入数量
     */
    int bindUserAndVehicle(@Param(value = "list") List<UserVehicle> vhsId);

    /**
     * 通过用户ID解绑用户与车辆的绑定关系
     * create by lilongfei
     *
     * @param userId 用户Id
     * @return 删除数量
     */
    int unbindUserAndVehicle(@Param(value = "userId") String userId);

    /**
     * 判断特定目录类型是否被引用
     * create by lilongfei
     *
     * @param type 0 没有 1 有
     * @return
     */
    int baseDataHasBeUsed(@Param("type") String type);

    /**
     * 根据搜索条件检索各个车辆信息
     *
     * @param departName 部门名称
     * @param name       车辆名称
     * @param type       车辆类型
     * @param mfrsName   生产厂商
     * @param number     车牌号
     * @param simNumber  sim卡号
     * @return
     */
    List<Vehicle> selectVehicleByCondition(@Param(value = "departName") String departName,
                                           @Param(value = "name") String name,
                                           @Param(value = "type") String type,
                                           @Param(value = "mfrsName") String mfrsName,
                                           @Param(value = "number") String number,
                                           @Param(value = "simNumber") String simNumber,
                                           RowBounds rowBounds

    );

    /***
     * 在设备界面查询所有未绑定的车辆进行车辆设备绑定
     * @param departName
     * @param type
     * @param number
     * @param rowBounds
     * @return
     */
    List<Vehicle> selectVehicleToBind(@Param(value = "departId") String departId, @Param(value = "type") String type, @Param(value = "number") String number,
                                      RowBounds rowBounds);


    /**
     * 根据搜索条件检索各个车辆信息，服务于告警信息，需要绑定设备
     *
     * @param simNumber sim卡号
     * @return
     */

    List<Vehicle> selectVehicleBySimNumber(
            @Param(value = "simNumber") String simNumber);


    /**
     * 根据车辆id,获取车辆详情
     *
     * @param vehicleId 车辆id
     * @return
     */
    Vehicle selectVehicleById(@Param(value = "vehicleId") String vehicleId);

    /**
     * 根据车辆id,获取车辆详情
     *
     * @param vehicleNumber 车牌号
     * @return
     */
    Vehicle selectVehicleNumber(@Param(value = "vehicleNumber") String vehicleNumber);


    /**
     * 根据车辆id,修改车辆数据
     *
     * @param vehicleId
     * @param status
     * @return
     */
    int updateVehicleStatusById(@Param(value = "vehicleId") String vehicleId, @Param(value = "status") Integer status);


    List<Vehicle> selectByDepartId(@Param("list") List<String> departId);

    /**
     * 更新车辆的部门信息
     *
     * @param vehicleNumber 车牌号
     * @param departId      部门ID
     * @param departName    部门名称
     * @return
     */
    int updateDepart(@Param(value = "vehicleNumber") String vehicleNumber,
                     @Param(value = "departId") String departId,
                     @Param(value = "departName") String departName);

    /**
     * 通过车牌号删除车辆
     * @param vehicleNumber
     * @return
     */
    int deleteByVehicleNumber(@Param("vehicleNumber") String vehicleNumber);

    boolean isExist(@Param("vehicleNumber") String vehicleNumber);

}
